Various types of execution environments can be utilized to execute software applications. Execution environments can provide functionality for not only executing applications, but also for managing application execution and for providing other types of functionality. For example, one type of execution environment is an application container. Application containers typically provide functionality for loading application dependencies, interconnecting applications at run time, and for managing application lifecycles, including integrated application deployment and eviction. Standard configuration mechanisms can typically be utilized to access this functionality.
Executing application programs in an execution environment, such as an application container, may provide benefits over executing applications using traditional application architectures. For example, executing applications in an application container might permit applications to be decoupled from particular implementations by configuring the application container to inject implementations at run time, might permit applications to be constructed and deployed in a modular fashion by deploying the modules to an application container independently and interconnecting the modules at run time, and might permit multiple tenants to execute applications in the same application container, thereby sharing common frameworks in memory and potentially reducing resource utilization.
A unique set of challenges exists when utilizing execution environments, such as application containers, that host applications used by multiple tenants in a single process. For example, managing applications in an application container might require insight into the behavior of each application, which can be difficult to ascertain without process-level metrics that may be unavailable when multiple tenants utilize applications in the same container. Moreover, legacy application programs that are written under the assumption that they will be running on behalf of a single tenant in a process can fail when executed in a multi-tenant execution environment, such as a container executing applications for multiple tenants, for a variety of reasons. Other challenges might also be presented when application programs are executed in execution environments in a distributed computing environment. For example, it might be difficult to scale the execution of application programs in a distributed computing environment, where components might be executed in a distributed fashion on multiple local or remotely located computing systems.
The disclosure made herein is presented with respect to these and other considerations.